package org.chartsy.welcome.content;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.methods.GetMethod;
import org.chartsy.main.managers.ProxyManager;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
/**
*
* @author viorel.gheba
*/
public class RSSFeedParser {
static final String TITLE = "title";
static final String DESCRIPTION = "description";
static final String CHANNEL = "channel";
static final String LANGUAGE = "language";
static final String LINK = "link";
static final String ITEM = "item";
static final String PUB_DATE = "pubDate";
static final String GUID = "guid";
URL url;
public RSSFeedParser(String feedUrl) {
try { this.url = new URL(feedUrl); }
catch (MalformedURLException e) {}
}
public Feed readFeed() {
Feed feed = null;
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(
ProxyManager.getDefault().inputStreamGET(url.toString()));
document.normalizeDocument();
if (document != null) {
Element rss = (Element) document.getElementsByTagName("rss").item(0);
Element channel = (Element) rss.getElementsByTagName(CHANNEL).item(0);
String title = "";
String link = "";
String desc = "";
String lang = "";
NodeList nodeList = channel.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Element element = (Element) nodeList.item(i);
if (element.getTagName().equals(TITLE)) title = element.getTextContent();
if (element.getTagName().equals(LINK)) link = element.getTextContent();
if (element.getTagName().equals(DESCRIPTION)) desc = element.getTextContent();
if (element.getTagName().equals(LANGUAGE)) lang = element.getTextContent();
if (element.getTagName().equals(ITEM)) break;
}
feed = new Feed(title, link, desc, lang);
nodeList = channel.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Element item = (Element) nodeList.item(i);
if (item.getTagName().equals(ITEM)) {
NodeList itemNodeList = item.getChildNodes();
FeedMessage feedMessage = new FeedMessage();
for (int j = 0; j < itemNodeList.getLength(); j++) {
Element element = (Element) itemNodeList.item(j);
if (element.getTagName().equals(TITLE)) feedMessage.setTitle(element.getTextContent());
if (element.getTagName().equals(GUID)) feedMessage.setGuid(element.getTextContent());
if (element.getTagName().equals(LINK)) feedMessage.setLink(element.getTextContent());
if (element.getTagName().equals(DESCRIPTION)) feedMessage.setDescription(element.getTextContent());
if (element.getTagName().equals(PUB_DATE)) feedMessage.setPubDate(element.getTextContent());
}
feed.getMessages().add(feedMessage);
}
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
return feed;
}
}